<?php

/**
 * Implenta las funciones necesarias para gestionar un proveedor del sistema
 *
 * @author Daniel Cardoza, Gary Dos Santos, Freddy Rodriguez
 */
class DBProveedorDAO extends DBMySQLDAO implements IDBProveedorDAO {

    private $proveedor = null;

    public function  __construct() {
        try {
            $conexion = new conexion();
            $this->DBConn = $conexion->setConnect();
        } catch ( SQLException $Ex ) {
            throw new DBProveedorDAOException("Se produjo un error al concetar con la base de datos", 1);
        }
    }
    /**
     * Devuelve un vector con toda la informacion del proveedor que tenga el id
     * que entra por parametro
     *
     * @param <int> $id
     * @return <Array> $fila
     */
    public function select( $id ) {
        $id = addslashes( $id );

        $str = "SELECT *
                    FROM proveedor
                    WHERE PRV_ID = {$id}
                    AND PRV_STATUS = 1";

        $this->DBConn->consulta( $str );

        if ( $this->DBConn->filasAfectadas() != -1){
            $fila = $this->DBConn->extraer_registro();

            $proveedor = new Proveedor($fila['PRV_ID'], $fila['PRV_RIF'], $fila['PRV_NOMBRE_EMPRESA'],
                        $fila['PRV_DIRECCION'], $fila['PRV_NOMBRE'], $fila['PRV_APELLIDO'],
                        $fila['PRV_TELEFONO'], $fila['PRV_EMAIL']);

             return $proveedor;
        } else {
            return false;
        }

    }

    /**
     * Introduce un proveedor nuevo a la base de datos
     * 
     * @return <bool> true
     * @return <bool> false
     */
    public function insert( Proveedor $proveedor ) {
        $id = addslashes( $proveedor->getId() );
        $rif = addslashes( $proveedor->getRif() );
        $nombreEmpresa = addslashes( $proveedor->getNombreEmpresa() );
        $direccion = addslashes( $proveedor->getDireccion() );
        $nombre = addslashes( $proveedor->getNombre() );
        $apellido = addslashes( $proveedor->getApellido() );
        $telefono = addslashes( $proveedor->getTelefono() );
        $email = addslashes( $proveedor->getEmail() );

        if ( $proveedor->getId() != -1 ){
            $str = "INSERT INTO proveedor
                        VALUES (NULL,'{$rif}','{$nombreEmpresa}',
                        '{$direccion}','{$nombre}','{$apellido}',
                        '{$telefono}','{$email}',1)";

            $this->DBConn->consulta( $str );
        } else {
            $str = "INSERT INTO proveedor
                        VALUES ({$id},'{$rif}','{$nombreEmpresa}',
                        '{$direccion}','{$nombre}','{$apellido}',
                        '{$telefono}','{$email}',1)";

             $this->DBConn->consulta( $str );
        }
        if ( $this->DBConn->filasAfectadas() != -1){
            return true;
        } else {
            return false;
        }
        
    }

    /**
     * Actualiza un proveedor del sistema
     *
     * @return <bool> true
     * @return <bool> false
     */
    public function update( Proveedor $proveedor ){
        $id = addslashes( $proveedor->getId() );
        $rif = addslashes( $proveedor->getRif() );
        $nombreEmpresa = addslashes( $proveedor->getNombreEmpresa() );
        $direccion = addslashes( $proveedor->getDireccion() );
        $nombre = addslashes( $proveedor->getNombre() );
        $apellido = addslashes( $proveedor->getApellido() );
        $telefono = addslashes( $proveedor->getTelefono() );
        $email = addslashes( $proveedor->getEmail() );

        $str = "UPDATE proveedor
                    SET PRV_RIF = '{$rif}',
                    PRV_NOMBRE_EMPRESA = '{$nombreEmpresa}',
                    PRV_DIRECCION = '{$direccion}',
                    PRV_NOMBRE = '{$nombre}',
                    PRV_APELLIDO = '{$apellido}',
                    PRV_TELEFONO = '{$telefono}',
                    PRV_EMAIL = '{$email}'
                    WHERE PRV_ID = {$id}";

        $this->DBConn->consulta( $str );

        if ( $this->DBConn->filasAfectadas() != -1){
            return true;
        } else {
            return false;
        }

    }

    /**
    * Eliminacion de un proveedor en base de datos
    *
    * @return <bool> true
    * @return <bool> false
    */
    public function delete( $id ){
            $id = addslashes( $id );

            $str = "UPDATE Proveedor
                        SET PRV_STATUS = 0
                        WHERE PRV_ID = {$id}";
                        
            $this->DBConn->consulta( $str );

            if ( $this->DBConn->filasAfectadas() != -1){
                return true;
            } else {
                return false;
            } 
    }

    /**
    * Devuelve una lista con todos los usuarios
    *
    * @return <array> usuario
    * @return <bool> true
    * @return <bool> false
    * @test
    */
    public function listaProveedor(){
        $str = "SELECT *
                    FROM proveedor
                    WHERE PRV_STATUS = 1";
        
        $this->DBConn->consulta( $str );

        if ( $this->DBConn->filasAfectadas() != -1){

            while ( $fila = $this->DBConn->extraer_registro() ) {
                 $proveedor = new Proveedor($fila['PRV_ID'], $fila['PRV_RIF'], $fila['PRV_NOMBRE_EMPRESA'],
                        $fila['PRV_DIRECCION'], $fila['PRV_NOMBRE'], $fila['PRV_APELLIDO'],
                        $fila['PRV_TELEFONO'], $fila['PRV_EMAIL']);

                 $listaProveedor[] = $proveedor;
            }

            return $listaProveedor;
        } else {
            return false;
        }
    }


}
?>
